package com.smsVerification.utils;

import cn.hutool.crypto.symmetric.AES;

/**
 * @author truezir_tech_team
 */
abstract public class EncryptValueHandler {

    /**
     * AES使用的MODEL
     */
    static final String AES_MODEL = "CBC";

    /**
     * AES使用的PADDING
     */
    static final String AES_PADDING = "PKCS7Padding";

    /**
     * 获取加解密用的AES对象
     *
     * @param encryptKey 密钥
     * @param encryptIv  加盐偏移
     * @return AES对象
     */
    private static AES getAes(String encryptKey, String encryptIv) {
        return new AES(AES_MODEL, AES_PADDING,
                // 密钥，可以自定义
                encryptKey.getBytes(),
                // iv加盐，按照实际需求添加
                //必须要16位
                encryptIv.getBytes());
    }

    /**
     * 解密经过AES CBC加密的数据
     *
     * @param encryptKey    密钥
     * @param encryptIv     加盐偏移
     * @param encryptedData 加密的数据
     * @return 解密的数据
     */
    public static String getAesCbcDecryptData(String encryptKey, String encryptIv, String encryptedData) {

        AES aes = getAes(encryptKey, encryptIv);
        String decryptData = null;
        try {
            decryptData = aes.decryptStr(encryptedData);
        } catch (Exception ignored) {

        }

        return decryptData;
    }

    /**
     * 用AES CBC加密数据
     *
     * @param encryptKey    密钥
     * @param encryptIv     加盐偏移
     * @param encryptedData 加密的数据
     * @return 解密的数据
     */
    public static String getAesCbcEncryptData(String encryptKey, String encryptIv, String encryptedData) {

        AES aes = getAes(encryptKey, encryptIv);
        String encryptData = null;
        try {
            encryptData = aes.encryptHex(encryptedData);
        } catch (Exception ignored) {

        }

        return encryptData;
    }

}
